﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Data;
using ProyectoVuelos.Acceso_a_Datos.Mysql;
using ProyectoVuelos.Entidades;
using ProyectoVuelos.Logica.Excepciones;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace ProyectoVuelos.Logica.RegistroUsuario
{
    public class LogicaRegistroUsuario
    {
        MySQLRegistroUsuario persistidor;

        public LogicaRegistroUsuario()
        {
        }


        #region Métodos

        #region Validaciones

        public bool ValidarPasaporte(string pasaporte)
        {
            try
            {
                persistidor = new MySQLRegistroUsuario();
                return persistidor.ValidarPasaporte(pasaporte);
            }
            catch (NullReferenceException)
            {
                throw new LogicaCompraVuelosExcepcion("ERROR:No esta permitido manipular o acceder a un objeto nulo");
            }
        }

        #endregion

        /// <summary>
        /// Procedimiento que crea e inserta un usuario en base de datos
        /// </summary>
        /// <param name="pasaporte"></param>
        /// <param name="cedula"></param>
        /// <param name="nombre"></param>
        /// <param name="segundoNombre"></param>
        /// <param name="apellido"></param>
        /// <param name="segundoApellido"></param>
        /// <param name="fechaNac"></param>
        /// <param name="sexo"></param>
        /// <param name="email"></param>
        /// <param name="telefono"></param>
        /// <returns></returns>
        public Usuario CrearUsuario(string pasaporte, string cedula, string nombre, string segundoNombre, string apellido,
                                   string segundoApellido, DateTime fechaNac, char sexo, string email, string telefono)
        {
            try
            {
                Usuario persona = new Usuario(pasaporte, cedula, nombre, segundoNombre, apellido, segundoApellido, fechaNac, sexo, email, telefono, null);

                return persona;
            }
            catch (MethodAccessException ex)
            {
                throw new LogicaCompraVuelosExcepcion("ERROR:Se detecto un error durante el acceso a una clase: " + ex.Message);
            }
            catch (NullReferenceException)
            {
                throw new LogicaCompraVuelosExcepcion("ERROR:No esta permitido manipular o acceder a un objeto nulo");
            }
            finally
            {

            }
        }

        //public Usuario CrearCuenta(string nombre, string clave, Usuario usuario)
        //{
        //    try
        //    {
        //        Cuenta cuenta = new Cuenta(nombre, clave, null,null);
        //        usuario.Cuenta = cuenta;

        //        return usuario;
        //    }
        //    catch (MethodAccessException ex)
        //    {
        //        throw new LogicaCompraVuelosExcepcion("ERROR:Se detecto un error durante el acceso a una clase: " + ex.Message);
        //    }
        //    catch (NullReferenceException)
        //    {
        //        throw new LogicaCompraVuelosExcepcion("ERROR:No esta permitido manipular o acceder a un objeto nulo");
        //    }
        //    finally
        //    {

        //    }
        //}


        public Cuenta CrearCuenta2(string nombre, string clave)
        {
            try
            {
                Cuenta cuenta = new Cuenta(nombre, clave, null, null);

                return cuenta;
            }
            catch (MethodAccessException ex)
            {
                throw new LogicaCompraVuelosExcepcion("ERROR:Se detecto un error durante el acceso a una clase: " + ex.Message);
            }
            catch (NullReferenceException)
            {
                throw new LogicaCompraVuelosExcepcion("ERROR:No esta permitido manipular o acceder a un objeto nulo");
            }
            finally
            {

            }
        }


        public int ForaneaPersona(Usuario usuario)
        {
            try
            {
                string pasaporte = usuario.Pasaporte;
                persistidor = new MySQLRegistroUsuario();
                return persistidor.ForaneaPersona(pasaporte);
            }
            catch (MethodAccessException ex)
            {
                throw new LogicaCompraVuelosExcepcion("ERROR:Se detecto un error durante el acceso a una clase: " + ex.Message);
            }
            catch (NullReferenceException)
            {
                throw new LogicaCompraVuelosExcepcion("ERROR:No esta permitido manipular o acceder a un objeto nulo");
            }
            finally
            {

            }
        }

        public bool InsertarUsuario(Usuario miUsuario)
        {
            bool respuesta = false;

            try
            {
                persistidor = new MySQLRegistroUsuario();
                respuesta = persistidor.InsertarUsuario(miUsuario);
            }
            catch (MethodAccessException ex)
            {
                throw new LogicaCompraVuelosExcepcion("ERROR:Se detecto un error durante el acceso a una clase: " + ex.Message);
            }
            catch (NullReferenceException)
            {
                throw new LogicaCompraVuelosExcepcion("ERROR:No esta permitido manipular o acceder a un objeto nulo");
            }
            finally
            {

            }

            return respuesta;
        }

        public bool InsertarCuenta(Cuenta miCuenta, int foraneaPersona)
        {
            bool respuesta = false;

            try
            {
                persistidor = new MySQLRegistroUsuario();
                respuesta = persistidor.InsertarCuenta(miCuenta,foraneaPersona);
            }
            catch (MethodAccessException ex)
            {
                throw new LogicaCompraVuelosExcepcion("ERROR:Se detecto un error durante el acceso a una clase: " + ex.Message);
            }
            catch (NullReferenceException)
            {
                throw new LogicaCompraVuelosExcepcion("ERROR:No esta permitido manipular o acceder a un objeto nulo");
            }
            finally
            {

            }

            return respuesta;
        }

        /// <summary>
        /// valida que el usuario halla introducido la cuenta y una contraseña valida para entrar a la
        /// aplicacion.
        /// </summary>
        /// <param name="cuenta"></param>
        /// <param name="clave"></param>
        /// <returns></returns>
        public bool ValidarUsuario(string cuenta, string clave)
        {
            bool respuesta = false;

            try
            {
                persistidor = new MySQLRegistroUsuario();
                respuesta = persistidor.ValidarCuenta(cuenta, clave);
            }
            catch (MethodAccessException ex)
            {
                throw new LogicaCompraVuelosExcepcion("ERROR:Se detecto un error durante el acceso a una clase: " + ex.Message);
            }
            catch (NullReferenceException)
            {
                throw new LogicaCompraVuelosExcepcion("ERROR:No esta permitido manipular o acceder a un objeto nulo");
            }
            finally
            {

            }

            return respuesta;
        }

        public int RetornoIdCuenta(string cuenta)
        {
            try
            {
                persistidor = new MySQLRegistroUsuario();
                return persistidor.RetornoIdCuenta(cuenta);
            }
            catch (MethodAccessException ex)
            {
                throw new LogicaCompraVuelosExcepcion("ERROR:Se detecto un error durante el acceso a una clase: " + ex.Message);
            }
            catch (NullReferenceException)
            {
                throw new LogicaCompraVuelosExcepcion("ERROR:No esta permitido manipular o acceder a un objeto nulo");
            }
            finally
            {

            }
        }

        public Usuario RetornoPersonaPorIdCuenta(int FkPersonaCuenta)
        {
            try
            {
                persistidor = new MySQLRegistroUsuario();
                return persistidor.RetornoPersonaPorIdCuenta(FkPersonaCuenta);
            }
            catch (MethodAccessException ex)
            {
                throw new LogicaCompraVuelosExcepcion("ERROR:Se detecto un error durante el acceso a una clase: " + ex.Message);
            }
            catch (NullReferenceException)
            {
                throw new LogicaCompraVuelosExcepcion("ERROR:No esta permitido manipular o acceder a un objeto nulo");
            }
            finally
            {

            }
        }

        public List<Compra> RetornoComprasCuenta(string cuenta)
        {
            try
            {
                persistidor = new MySQLRegistroUsuario();
                return persistidor.RetornoComprasCuenta(cuenta);
            }
            catch (MethodAccessException ex)
            {
                throw new LogicaCompraVuelosExcepcion("ERROR:Se detecto un error durante el acceso a una clase: " + ex.Message);
            }
            catch (NullReferenceException)
            {
                throw new LogicaCompraVuelosExcepcion("ERROR:No esta permitido manipular o acceder a un objeto nulo");
            }
            finally
            {

            }
        }

        public int RetornoIdFacturaParametro(int numeroCompra, string cuenta)
        {
            try
            {
                persistidor = new MySQLRegistroUsuario();
                return persistidor.RetornoIdFacturaParametro(numeroCompra, cuenta);
            }
            catch (MethodAccessException ex)
            {
                throw new LogicaCompraVuelosExcepcion("ERROR:Se detecto un error durante el acceso a una clase: " + ex.Message);
            }
            catch (NullReferenceException)
            {
                throw new LogicaCompraVuelosExcepcion("ERROR:No esta permitido manipular o acceder a un objeto nulo");
            }
            finally
            {

            }
        }

        #endregion
    }
}